/*
  1 获取用户的收货地址
      1 绑定点击事件
      2 调用小程序内置的api获取用户默认的收货地址 wx.chooseAddress
      3 把获取到的收货地址存到本地存储中
  2 页面加载完毕
    onload onShow
      1 获取本地存储中地址数据
      2 把数据 给data
  3 onShow
    商品详情页第一次添加商品时添加了加入购物车自动勾选
    num=1
    checked=true
      1 获取缓存中的购物车数组
      2 把购物车数据放到data中
  4 全选 
      1 onShow获取到缓存的购物车数据
      2 根据购物车商品数据计算
      3 所有的商品都被选中 checked=true
  5 商品总价
      1 商品被选中才计算
      2 获取购物车数组 遍历
      3 判断商品是否被选中
      4 总价格+=商品单价*商品数量
      5 总数量+=商品的数量
      6 计算后的价格和数量 设置回data
  6 商品选中功能
      1 绑定changeshijian
      2 获取到被修改的商品对象
      3 选中状态取反
      4 重新放回data和缓存区
      5 重新计算价格
  7 全选反选
      1 全选的复选框绑定事件
      2 获取data的选中状态 allChecked
      3 直接取反 allChecked=！allChecked
      4 遍历购物车 让里面的商品 选中状态随着allChecked改变
      5 购物车数组 选中状态 放回data 重设置缓存区
  8 商品数量加减
      1 加减按钮绑定同一个点击事件 用自定义属性区分
      2 传递被点击的商品id goods_id
      3 获取data中的购物车数组 来获取需要被修改的商品对象
      4 当购物车数量等于1还点击减 弹窗提示是否删除 showModal
      5 直接修改数量 num
      6 把购物车数组重新放回data 缓存中  this.setCart
  9 点击结算
      1 判断有没有收货地址
      2 判断购物车有没有选中
      3 都有就跳转到支付页面
*/
Page({
  data: {
    result: {},
    cart: [],
    allChecked: false,
    totalPrice: 0,
    totalNum: 0
  },
  onShow() {
    // 1获取缓存中的收货地址
    const result = wx.getStorageSync("result");
    // 1 获取缓存数据
    const cart = wx.getStorageSync("cart") || [];
    this.setData({
      result
    });
    this.setCart(cart);
  },
  // 点击收货地址按钮
  handleChooseAddress() {
    // console.log("获取收货地址");
    // 2 获取收货地址
    wx.chooseAddress({
      success: (result) => {
        // console.log(result)
        // 3 存入到缓存中
        wx.setStorage({
          key: 'result',
          data: result,
        });

      }
    });
  },
  // 商品的选中
  handeItemChange(e) {
    // 1 获取被修改的商品id
    const goods_id = e.currentTarget.dataset.id;
    // console.log(goods_id);
    // 2 获取购物车数组
    let {
      cart
    } = this.data;
    // 3 找到被修改的商品对象
    let index = cart.findIndex(v => v.goods_id === goods_id);
    // 4 反选
    cart[index].checked = !cart[index].checked;
    this.setCart(cart);
  },
  // 设置购物车状态 重新计算全选反选总价数量
  setCart(cart) {
    // this.setData({
    //   cart
    // });
    let allChecked = true;
    // 1 总价格 总数量
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(v => {
      if (v.checked) {
        totalPrice += v.num * v.goods_price;
        totalNum += v.num;
      } else {
        allChecked = false
      }
    });
    // 判断数组是否为空
    allChecked = cart.length != 0 ? allChecked : false;
    this.setData({
      cart,
      totalPrice,
      totalNum,
      allChecked
    });
    wx.setStorageSync("cart", cart);

  },
  // 商品全选
  handeItemAllCheck(){
    // 1 获取data的数据
    let {cart,allChecked}=this.data;
    // 2 修改值
    allChecked=!allChecked;
    // 3 循环修改cart数组选中状态
    cart.forEach(v=>v.checked=allChecked);
    // 4 修改的值放回data中
    this.setCart(cart);
  },
  // 商品数量加减
  handeItemNum(e){
    // 1 获取事件传递过来的参数
    const {operation,id}=e.currentTarget.dataset;
    // console.log({operation,id});
    // 2 获取购物车数组
    let {cart}=this.data;
    // 3 找到需要修改的商品索引
    const index=cart.findIndex(v=>v.goods_id===id);
    // 4 判断是否要执行删除
    if(cart[index].num===1&&operation===-1){
      // 弹窗提示
      wx.showModal({
        title: '警告',
        content: '我周某人的东西你敢不买',
        showCancel: true,
        cancelText: '取消',
        cancelColor: '#000000',
        confirmText: '确定',
        confirmColor: '#3CC51F',
        success: (result) => {
          if (result.confirm) {
            cart.splice(index,1)
            this.setCart(cart);
          }
        }
      });
    }else{
    // 5 修改数量
    cart[index].num+=operation;
    // 6 放回缓存 data中
    this.setCart(cart);
    }
  },
  // 点击结算
  handepay(){
    // 1 判断收货地址
    const {result,totalNum}=this.data;
    if(!result.userName){
      wx.showToast({
        title: '请选择收货地址',
        icon: 'none',
        success: (result) => {
          resolve(result);
        }
      });  
      return;
    }
    // 2 判断购物车有没有选中
    if(totalNum===0){
      wx.showToast({
        title: '还没有选购商品',
        icon: 'none',
        success: (result) => {
          resolve(result);
        }
      });
      return;
    }
    // 3 跳转到支付页面
    wx.navigateTo({
      url: '/pages/pay/index',
    });
      
  }
})